// miniprogram/pages/signIn/signIn.js
const app = getApp();
Page({

  /**
   * 页面的初始数据
   */
  data: {
    signInStatus: null,
    dayPage: null,
    pageIndex: 0,
    pageX: null,
    ruleFlag: false,
    popUpShow: false,
    popUpType: 'text',
    popUpTitle: '弹窗标题',
    popUpData: null
  },

  /**
   * 返回上一页
   */
  pageBack(){
    wx.navigateBack();
  },

  /**
   * 日历触摸开始事件
   */
  dayTouchstart(e){
    this.setData({
      pageX: e.changedTouches[0].pageX
    });
  },

  /**
   * 日历触摸结束事件
   */
  dayTouchend(e){
    if(this.data.pageX==null) return;
    var moveX = e.changedTouches[0].pageX-this.data.pageX;
    if(moveX>30){
      this.prevPage();
    }else if(moveX<-30){
      this.nextPage();
    }
    this.setData({
      pageX: null
    });
  },

  /**
   * 点击查看签到规则
   */
  clickRule(){
    this.setData({
      ruleFlag: !this.data.ruleFlag
    });
  },

  /**
   * 获取签到按钮
   */
  signIn(){
    // 签到
    app.signIn((msg)=>{
      this.setData({
        pageIndex: 0,
        popUpType: 'text',
        popUpShow: true,
        popUpTitle: '签到',
        popUpData: [
            {
              style: '',
              value: msg
            },{
              style: '',
              value: '已连续签到'+this.data.signInStatus.lxDay+'天'
            }
          ]
      });
    });
  },

  /**
   * 补签按钮
   */
  reSign(){
    // 补签
    app.reSign((msg)=>{
      this.setData({
        pageIndex: 0,
        popUpType: 'text',
        popUpShow: true,
        popUpTitle: '补签',
        popUpData: [
            {
              style: '',
              value: msg
            },{
              style: '',
              value: '已连续签到'+this.data.signInStatus.lxDay+'天'
            }
          ]
      });
    });
  },

  /**
   * 已签到及补签提示
   */
  noSign(){
    this.setData({
      pageIndex: 0,
      popUpType: 'text',
      popUpShow: true,
      popUpTitle: '签到',
      popUpData: this.data.signInStatus.isReSign?[
          {
            style: '',
            value: '已完成今日签到及补签'
          }
        ]:[
          {
            style: '',
            value: '已完成今日签到'
          }, {
            style: '',
            value: '当前无可补签'
          }
        ]
    });
  },

  /**
   * 初始化签到信息
   */
  initSignInStatus(){
    var that = this;
    // 赋值已有数据
    that.setData({
      signInStatus: app.globalData.signInStatus
    });
    // 监听全局变量变化
    app.watch('signInStatus',function(value){
      that.setData({
        signInStatus: value
      });
    });
    // 初始化setter
    app.globalData.signInStatus = that.data.signInStatus;
  },

  /**
   * 初始化日历页
   */
  initDayPage(){
    var dayPage = [];
    var now = new Date();
    var today = this.toYYYYMMDD(now.getTime());
    dayPage.push(this.getCalendar(now.getTime()));
    // 上个月
    now.setDate(0);
    dayPage.push(this.getCalendar(now.getTime()));
    this.setData({
      today,
      dayPage: dayPage
    });
  },

  /**
   * 添加上个月日历
   */
  addNextDayPage(){
    var dayPage = this.data.dayPage;
    if(!dayPage) return;
    // 最早一页的日期
    var date = new Date(dayPage[dayPage.length-1].month);
    // 上一月
    date.setDate(0);
    // 添加上一月日历
    dayPage.push(this.getCalendar(date.getTime()));
    this.setData({
      dayPage: dayPage
    });
  },

  
  /**
   * 上一页
   */
  prevPage(){
    // 预加载一页
    if(this.data.pageIndex+2==this.data.dayPage.length) this.addNextDayPage();
    this.setData({
      pageIndex: this.data.pageIndex+1
    });
  },

  /**
   * 下一页
   */
  nextPage(){
    if(!this.data.pageIndex) return;
    this.setData({
      pageIndex: this.data.pageIndex-1
    });
  },

  /**
   * 转日期格式YYYY-MM-DD
   * @param {String} time 时间戳
   * @param {String} num 返回区间(1,2,3)=>(y,ym,ymd)
   */
  toYYYYMMDD(time,num=3){
    var date = new Date(time);
    var year = date.getFullYear().toString();
    var month = (date.getMonth()+1).toString();
    var day = date.getDate().toString();
    return (year+'-'+(month.length==1?'0'+month:month)+'-'+(day.length==1?'0'+day:day)).split('-',num).join('-');
  },

  /**
   * 根据年月转月份日历列表
   */
  getCalendar(time){
    var day = new Date(time);
    // 本月第一天
    day.setDate(1);
    // 日历列表前 按第一天星期 补空字符串
    var list = day.getDay()?'-'.repeat(day.getDay()-1).split('-'):[];
    // 下个月
    day.setDate(32);
    // 这个月最后一天
    day.setDate(0);
    var lastDay = day.getDate();
    for(var i=1;i<=lastDay;i++){
      list.push(i.toString());
    }
    var dayList = [];
    // 分割数组，7个一行
    for(var i=1;i<=Math.ceil(list.length/7)*7;i++){
      var j = Math.ceil(i/7)-1;
      if(!dayList[j]){
        dayList[j] = [];
      }
      // 最后一行数组后补空字符串
      dayList[j].push((list[i-1]?list[i-1]:''));
    }
    return {
      month: this.toYYYYMMDD(day.getTime(),2),
      list: dayList
    };
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 获取签到信息
    app.getSignInStatus();
    // 初始化日历页
    this.initDayPage();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 初始化签到信息-全局双向绑定
    this.initSignInStatus();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})